""" 英雄机的类
基本的调用函数
set_pos(self,x,y) 设置飞机初始位置

press_move(self) 持续移动

"""
from setting import *
from lifebar import *

class HeroPlane(pygame.sprite.Sprite):
    def __init__(self):
        self._layer = 1
        self.groups = allgroup, herogroup
        pygame.sprite.Sprite.__init__(self, self.groups)
        # 默认图像及尺寸
        self.image = pygame.image.load('images/hero/hero.png').convert_alpha()
        self.rect = self.image.get_rect()
        self.mask = pygame.mask.from_surface(self.image)
        #动起来的速度是 2，设置成零的话，以后就动不了了。
        self.speed = 6
        #飞机的x,y初始速度，不动。
        self.x_speed = 0
        self.y_speed = 0
        # 移动按键储存
        self.key_down_list = []
        self.HP = 100
        self.HPFULL = 100
        lifebar = Lifebar(self)

    #计算飞机位置，精灵组会自动调用
    def update(self):
        """ 
        更新飞机位置
            飞机位置超出 scene时，不进行运算
        """
        #计算飞机的位置
        self.rect.x += self.x_speed
        self.rect.y += self.y_speed
        #限制飞机在场景scene
        if self.rect.x <= 0:
            self.rect.x = 0
        elif self.rect.x > SCENEWIDTH - self.rect.width:
            self.rect.x = SCENEWIDTH - self.rect.width
        elif self.rect.y <= 0:
            self.rect.y = 0
        elif self.rect.y > SCENEHEIGHT - self.rect.height:
            self.rect.y = SCENEHEIGHT - self.rect.height

    def set_speed(self,speed = 4):
        self.speed = speed
    #设置飞机位置，场景初始化时用
    def set_pos(self, x, y):
        """ 
        设置飞机位置
            x 左上角x点坐标
            y 左上角y点坐标
        """
        self.rect.x = x
        self.rect.y = y
    
    #计算飞机的位置，挨揍用
    def get_pos(self):
        """ 
        返回 vector2的值
            example:
            pos1 = get_pos()
            print(pos1.x ,pos1.y)
        """
        return vect(self.rect.x, self.rect.y)

    #飞机移动，把移动的记录存到列表里，在场景的按键里判断，做出反应
    def move(self, direction):
        """ 
        移动飞机
            direction 方向，可以为string值
            RIGHT
            LEFT
            UP
            DOWN
            example：  move("RIGHT")
        """
        #先把字符串全转换为大写
        # x,y方向上不动的，必须设置成 0
        direction = direction.upper()
        if direction == 'RIGHT':
            self.x_speed = self.speed
            self.y_speed = 0
        elif direction == 'LEFT':
            self.x_speed = -self.speed
            self.y_speed = 0
        elif direction == "UP":
            self.x_speed = 0
            self.y_speed = -self.speed
        elif direction == 'DOWN':
            self.x_speed = 0
            self.y_speed = self.speed
        else:
            pass

    #移动按键按下，存到list里
    def key_down(self, key):
        self.key_down_list.append(key)

    #移动按键松开，清空列表，初始化速度
    def key_up(self, key):
        if len(self.key_down_list) != 0:
            try:
                self.key_down_list.remove(key)
                #速度再次初始,speed不能初始，不然动不了了。
                # self.speed  = 0
                self.x_speed = 0
                self.y_speed = 0
            except Exception:
                pass

    #持续移动
    #如果移动键列表不为零，则根据列表数据，相应移动
    def press_move(self):
        if len(self.key_down_list) != 0:
            if self.key_down_list[0] == pygame.K_a:
                self.move('LEFT')
            elif self.key_down_list[0] == pygame.K_d:
                self.move('RIGHT')
            elif self.key_down_list[0] == pygame.K_w:
                self.move('UP')
            elif self.key_down_list[0] == pygame.K_s:
                self.move("DOWN")
